import java.util.Random;

class DNA{	
	private int code;
	
	public DNA(int code){
		this.code=code;
	}
	
	public static DNA getUniqueDNA(int code){
	    Random rand = new Random();	    
		return new DNA(code+rand.nextInt(1000));
	}
}

class Schaf {
	private DNA dna;
	private String name;
	
	public Schaf(String name) {
		this.name = name;
		this.dna = DNA.getUniqueDNA(name.hashCode()); //Erstellt eine eindeutige DNA
	}
	
	public String getName() {
		return name;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
    public DNA getDNA() {        
        return dna;
    }
    
    public void setDNA(DNA dna) {        
        this.dna  = dna;
    }
	
	/**
	 * Erstellt eine identische Kopie des aktuellen Objekts
	 * Erstellt aber keine Kopie sondern gibt immer die Referenz auf "this" zurück
	public Schaf klone() {
		return this;
	}
	**/
	
	public Schaf klone() {
	    Schaf klon=new Schaf(this.name);
	    klon.setDNA(this.dna);
		return klon;
	}
	
	public boolean equals(Object obj) {
		if (obj instanceof Schaf){
			if (this.name == ((Schaf)obj).getName() && this.dna == ((Schaf)obj).getDNA()) return true;
		}
		return false;
	}
	
}

public class Aufgabe2 {

	public static void main(String[] args) {
	    Schaf dolly=new Schaf("dolly");
	    Schaf molly=dolly.klone();
	    
	    if (dolly.equals(molly) && dolly!=molly) {	          
	        System.out.println("objekt_1 ist ein Klon von objekt_2");
	    } else {
	        System.out.println("objekt_1 ist kein Klon von objekt_2");
	    }

	}

}
